package com.pz.gulimall.common.exception;

import lombok.Getter;

/**
 *   ○ 10：通用
 *     ■ 001：参数格式校验
 *     ■ 002：线程异常
 *     ■ 003：数据库异常
 *     ■ 004：数据库保存数据异常
 *     ■ 005：mq 消息 ack 异常-
 *     ■ 006：mq 服务异常-
 *     ■ 007：创建aliPayClient实例异常-
 *     ■ 008：请求流量过多
 *     ■ 009：Bean初始化异常
 *   ○ 11-商品：
 *      ■ 000：商品上架异常
 *      ■ 001：提交的 loginId 为空
 *      ■ 002：远程调用仓储服务失败-
 *      ■ 003：远程调用搜索服务失败-
 *   ○ 12-订单：
 *      ■ 000：消息发送异常-
 *      ■ 001：消息确认异常-
 *      ■ 002：调用 product 远程服务失败-
 *      ■ 003：订单购物项为空
 *      ■ 004：调用 ware 远程服务失败-
 *      ■ 005：订单的商品均无货
 *   ○ 13-购物车：
 *   ○ 14-物流：
 *   ○ 15-认证：
 *      ■ 000：手机号码格式错误
 *      ■ 001：手机号不存在
 *      ■ 002：发送冷却时间未过
 *      ■ 003：验证码错误
 *      ■ 004：调用 member 远程服务失败
 *      ■ 005：调用 thirdParty 远程服务失败
 *      ■ 006：登录失败-密码或账号错误
 *      ■ 007：登录成功
 *      ■ 008：已登录
 *      ■ 009：未登录
 *      ■ 010：请提交账号
 *      ■ 011：调用 product 远程服务失败
 *      ■ 012：用户已被注册
 *      ■ 013：缓存对象转换异常
 *      ■ 014：请输入合法的数量
 *      ■ 015：调用 order 远程服务失败-
 *      ■ 016：调用 ware 远程服务失败-
 *   ○ 16-用户：
 *      ■ 000：用户名已经存在
 *      ■ 001：手机号已经被注册
 *      ■ 002：用户不存在
 *      ■ 003：搜索用户 type 非法
 *      ■ 004：关注关系已经存在-
 *
 *   ○ 17-第三方服务：
 *      ■ 000：短信服务异常
 *      ■ 001：支付宝支付验签异常-
 *      ■ 002：调用支付宝异常-
 *
 *   ○ 18-仓储服务：
 *  *   ■ 000：库存不足的skuId集合-[skuIds]
 *      ■ 001：远程调用 order 服务失败-
 *      ■ 002：库存不存在的skuId集合 - []
 *
 *   ○ 19-IM服务：
 *      ■ 000：netty channel 关闭同步阻塞异常-
 *      ■ 001：非法消息格式-
 *      ■ 002：连接 netty-ws 服务端异常-
 *      ■ 003：netty-ws-client 启动失败-
 */
@Getter
public enum BizCodeEnum {

    UNKNOW_EXCEPTION(10000, "系统未知异常"),
    VAILD_EXCEPTION(10001,"参数校验出现问题"),
    THREAD_EXCEPTION(10002, "线程异常"),
    MYSQL_EXCEPTION(10003, "数据库异常"),
    MYSQL_SAVE_Exception(10004,"数据库保存数据异常"),
    RABBITMQ_ACK_EXCEPTION(10005,"mq 消息 ack 异常-"),
    RABBITMQ_SERVER_EXCEPTION(10006,"mq 服务异常-"),
    CREATE_ALIPAY_INSTANCE_EXCEPTION(10007,"创建aliPayClient实例异常-"),
    TOO_MANY_REQUEST(10008,"请求流量过多"),
    BEAN_INIT_EXCEPTION(10009,"Bean初始化异常-"),

    PRODUCT_UP_EXCEPTION(11000,"商品上架异常"),
    PRODUCT_LOGIN_ID_EMPTY(11001,"提交的 loginId 为空"),
    PRODUCT_RPC_WARE(11002,"远程调用仓储服务失败-"),
    PRODUCT_RPC_SEARCH(11003,"远程调用搜索服务失败-"),

    ORDER_MESSAGE_SENDEXCEPTION(12000,"消息发送异常-"),
    ORDER_MESSAGE_ACKEDEXCEPTION(12001,"消息确认异常-"),
    ORDER_RPC_PRODUCT(12002,"调用 product 远程服务失败-"),
    ORDER_ITEMS_EMPTY(12003,"订单购物项为空"),
    ORDER_RPC_WARE_FAILED(12004,"调用 ware 远程服务失败--"),
    ORDER_ITEMS_OutOfStock(12005,"订单的商品均无货"),

    CHECKCODE_ILLEGAL(15000, "手机号码格式错误"),
    CHECKCODE_CATNOTSEND(15002, "发送冷却时间未过"),
    CHECKCODE_MISMATCH(15003, "验证码错误"),

    AUTH_RPC_MEMBER_FAILED(15004, "调用member远程服务失败"),
    AUTH_RPC_PRODUCT_FAILED(15011, "调用 product 远程服务失败"),
    AUTH_LOGIN_FAILED(15006, "登录失败-密码或账号错误"),
    AUTH_LOGIN_SUCCESS(15007, "登录成功"),
    AUTH_LOGGING_STATUS(15008, "已登录"),
    AUTH_LOGOUT_STATUS(15009, "未登录"),
    AUTH_SHOPCAR_NO_ID(15010, "请提交账号"),
    AUTH_REGISTER_MEMBER_EXISTED(15012, "用户已被注册"),
    AUTH_Illegal_Access(15013, "用户已被注册"),
    AUTH_Illegal_COUNT(15014, "请输入合法的数量"),
    AUTH_RPC_ORDER_FAILED(15015, "调用 order 远程服务失败-"),
    AUTH_RPC_WARE_FAILED(15016, "调用 ware 远程服务失败-"),

    CHECKCODE_RPC_THIRDPARTY_FAILED(15005, "调用 thirdParty 远程服务失败"),

    MEMBER_REGISTER_EXISTED_USERNAME(16000, "用户名已经存在"),
    MEMBER_REGISTER_EXISTED_MOBILE(16001, "手机号已经被注册"),
    MEMBER_DONT_EXISTED(16002, "用户不存在"),
    MEMBER_SEARCH_TYPE_ILLEGAL(16003, "搜索用户 type 非法"),
    MEMBER_FOCUS_RELATION_EXISTED(16004, "关注关系已经存在-"),


    THIRDPARTY_SMS_EXCEPTION(17000, "短信服务异常-"),
    ALIPAY_RSA_CHECK_EXCEPTION(17001, "支付宝支付验签异常-"),
    ALIPAY_EXECUTE_EXCEPTION(17002, "调用支付宝异常-"),

    WARE_OUT_OF_STOCK(18000, "库存不足的skuId集合-"),
    WARE_RPC_ORDER_FAILED(18001, "远程调用 order 服务失败-"),
    WARE_NOT_HAS_STOCKS_EXCEPTION(18002, "库存不存在的skuId集合-"),

    NETTY_CHANNEL_SYNC_EXCEPTION(19000, "netty channel 关闭同步阻塞异常-"),
    WEBSOCKET_MSG_ILLEGAL_FORMAT(19001, "非法消息格式-"),
    WEBSOCKET_CLIENT_CONNECT_EXCEPTION(19002, "连接 netty-ws 服务端异常-"),
    NETTY_WS_START_FAIL(19003, "netty-ws-client 启动失败-");

    private final int code;
    private final String msg;
//
    BizCodeEnum(int code, String msg){
        this.code = code;
        this.msg = msg;
    }
}
